<?php
/**
* @file BaseObject.php
* Copyright (c) Friends Group. All rights reserved.
* $Id$
*
*/

class BaseObject 
{

    /**
     * @ReturnType Object
     * Lấy tất cả thuộc tính của 1 lớp, trả về 1 mảng các tên thuộc tính và giá trị của thuộc tính.
     */
    public function getProperties() 
    {
        $result = array();
        foreach ($this as $name => $value)
        {
            if (strtolower($name) != "id")
                $result[] = $name;
        }
        return $result;
    }

    /**
    *
    */
    public function getData() 
    {
        $result = array();
        foreach ($this as $name => $value)
        {
            if (strtolower($name) != "id")
            {
                if(empty($value))
                    $result[$name] = null;
                else
                    $result[$name] = $value;
            }
        }
        return $result;
    }
    
    /**
     * @ReturnType String
     * @ParamType getValue 
     * @ParamType addQuote 
     * Lấy tất cả tên thuộc tính của lớp, trả về chuỗi các thuộc tính, cách nhau bởi dấu ,
     */
    public function getPropertiesString($getValue = false, $addQuote = true) 
    {
        throw new Exception("Not implement yet");
    }

    /**
     * @ReturnType Boolean
     * @ParamType propertyName 
     */
    public function hasProperty($propertyName) 
    {
        return property_exists($this, $propertyName);
    }

    /**
     * @ReturnType void
     * @ParamType propertyName 
     * @ParamType value 
     * Set giá trị cho 1 thuộc tính của Lớp
     */
    public function setProperty($propertyName, $value) 
    {
        $this->$propertyName = $value;
    }

    /**
     * @ReturnType Object
     * @ParamType propertyName 
     * Lấy giá trị của thuộc tính
     */
    public function getProperty($propertyName) 
    {
        return $this->$propertyName;
    }

    /**
     * @ReturnType Object
     * @ParamType array 
     */
    public function fromArray($array) 
    {
        foreach ($array as $p => $v)
        {
            $this ->setProperty($p, $v);
        }
        return $this;
    }

    /**
     * @ReturnType Object
     * @ParamType object 
     */
    public function fromObject($object) 
    {
        throw new Exception("Not implement yet");
    }
    
    function toJson()
    {
        $result = array();
        foreach ($this as $name => $value)
        {
            $result[$name] = $value;
        }
        return json_encode($result);
    }
    
    function toArray()
    {
        $result = array();
        foreach ($this as $name => $value)
        {
            $result[$name] = $value;
        }
        return $result;
    }
}
?>